/* Die Klasse Zustand
 * 
 * Die Klasse Zustand beinhaltet eine Zusatndsnummer zur 
 * Identifikation eines Zustands. Jedem Zustand koennen keine oder 
 * mehrere Konfigurationen hinzugefuegt werden.
 * 
 * 
 * Datei:  Zustand.java			Autor:    Martin Fischer
 * Datum:  16.11.2011                 	Version:  1.1
 * 
 * 
 */
package kommunikation.Parser;


public class Zustand
{
  /*
   * Zustandsnummer eines Zustands
   */
  private int zustandsnr;  
  /*
   * Array zum Hinzufuegen von Konfigurationen
   */
  private Konfig [] meineKonfig;	
                                 	 


  /*
   * Der Konstruktor initialisiert die Zustandsnummer und erzeugt ein 
   * Array vom Typ Konfig fuer die Zuordnung von Konfigurationen.
   */
  public Zustand (int zustandsnr)
  {
    this.zustandsnr = zustandsnr;
    meineKonfig = new Konfig[0];
  }


  /*
   * Liefert die Zustandsnummer
   */
  public int getZusandsnummer ()
  {
    return zustandsnr;
  }


  /*
   * Liefert eine Sammlung aller Konfigurationen zu einen Zustand.
   */
  public Konfig [] getGesamteKonfig ()
  {
    return meineKonfig;
  }


  /*
   * Liefer eine Konfiguration nach einem betimten gelesen Zeichen 
   * wieder.
   */
  public Konfig getKonfig (char zuPruefenNach)
  {
    if (meineKonfig.length == 0)
    {
      return null;
    }
    for (int i = 0; i < meineKonfig.length; i++)
    {
      if (meineKonfig[i].pruefeLeseZeichen (zuPruefenNach))
      {
        return meineKonfig[i];
      }
    }
    return null;
  }


  /*
   * Eine Konfiguration hinzufuegen
   */
  public void konfigHinzufuegen (char lelseZeichen, char schreibeZeichen, 
        int operation, Zustand folgeZustand)
  {
    Konfig konfig = new Konfig (lelseZeichen, schreibeZeichen, 
        operation, folgeZustand);
   
    Konfig [] tempkonfig = new Konfig [meineKonfig.length + 1];
    for (int i = 0; i < meineKonfig.length; i++)
    {  
      tempkonfig [i] = meineKonfig [i];
    }
    tempkonfig [meineKonfig.length] = konfig;
    meineKonfig = tempkonfig;    
  }


  /*
   * Sagt ob ein Zustand Endzusatnd ist Merke: Endzustaende ohne
   * Folgekonfiguration sind automatisch Endzustand
   */
  public boolean istEndzustand ()
  {
    if (meineKonfig.length == 0)
    {
      return true;
    }
    return false;
  }
}
